package com.capgemini.cn.authority.core.automation;

import com.capgemini.cn.authority.data.entity.AssertsGroup;
import com.capgemini.cn.authority.data.entity.Authorities;
import com.capgemini.cn.authority.data.entity.AuthoritiesType;

import java.util.List;

/**
 * Created at 2017/10/9
 *
 * @author Andriy
 */
public interface AuthorizeRegisterService {

    /**
     * 对自动注册进行初始化工作
     *
     * @return 返回一个java.lang.Object数组对象，一共包含三个元素：
     * <ul>
     * <li>第一个元素为默认资源组对象 - {@link AssertsGroup}</li>
     * <li>第二个元素为默认权限类型对象 - {@link AuthoritiesType}</li>
     * <li>第三个元素为默认权限对象 - {@link Authorities}</li>
     * </ul>
     */
    Object[] initialization();

    /**
     * 注册系统资源，将系统中标识的资源关联到指定的资源组中，该函数会将默认资源组关联到指定的权限上以形成一个统一的权限拥有所有系统自动注册资源的关系
     *
     * @param assertsGroup 系统资源所属资源组
     * @param authorities  系统权限
     * @param authorizeMap 权限注册列表
     * @return 返回一个java.util.List数组对象，一共包含两个元素：
     * <ul>
     * <li>第一个元素为被注册过的资源值集合</li>
     * <li>第二个元素为被注册过的权限编码集合</li>
     * </ul>
     */
    List[] register(final AssertsGroup assertsGroup, final Authorities authorities, final List<AuthorizeEntity> authorizeMap);

    /**
     * 删除废弃的资源数据
     *
     * @param excludeAssetsValue 排除在外的资源值
     */
    void deleteScrapAssetsData(String[] excludeAssetsValue);

    /**
     * 删除废弃的权限数据，
     *
     * @param authoritiesType        需要删除的权限所属权限类型
     * @param excludeAuthoritiesCode 排除在外的权限编码
     */
    void deleteScrapAuthoritiesData(AuthoritiesType authoritiesType, String[] excludeAuthoritiesCode);
}
